Unstack
沿指定轴将输入张量拆分为多个子张量,输出子张量按内存顺序排列。
\[output_i = input[\text{index along axis}]
\quad \text{for each slice along } axis\]
- 输入:
input - 输入张量地址。
shape - 输入张量各维度大小数组。
ndim - 输入张量维度。
axis - 拆分的维度索引。
data_size - 单个元素字节大小。
- 输出:
output - 输出张量地址数组,长度等于
shape[axis]。
- 支持平台:
FT78NEMT7004
备注
FT78NE 支持 fp32, fp64, int8, int16, int32, cplx64, cplx128
MT7004 支持 fp16, fp32, int16, int32, cplx64
共享存储版本:
-
void unstack_s(void *input, void *output, int *shape, int ndim, int axis, Uint32 data_size, int core_mask)
C调用示例:
1//FT78NE示例
2#include <stdio.h>
3#include <unstack.h>
4
5int main(int argc, char* argv[]) {
6 float *input = (float *)0xA0000000;
7
8 float *out0 = (float *)0xC0000000;
9 float *out1 = (float *)0xC0100000;
10 float *outputs[2] = {out0, out1};
11
12 int shape[2] = {2, 128};
13 int ndim = 2;
14 int axis = 0;
15 int core_mask = 0xff;
16
17 unstack_s(input, outputs, shape, ndim, axis, sizeof(float), core_mask);
18 return 0;
19}
私有存储版本:
-
void unstack_p(void *input, void *output, int *shape, int ndim, int axis, Uint32 data_size)
C调用示例:
1//MT7004示例
2#include <stdio.h>
3#include <unstack.h>
4
5int main(int argc, char* argv[]) {
6 half *input = (half *)0x10800000;
7 half *out0 = (half *)0x10810000;
8 half *out1 = (half *)0x10820000;
9 half *outputs[2] = {out0, out1};
10
11 int shape[3] = {1, 2, 64};
12 int ndim = 3;
13 int axis = 1;
14
15 unstack_p(input, outputs, shape, ndim, axis, sizeof(half));
16 return 0;
17}